// 导入 express
const express = require('express')
// 创建路由对象
const router = express.Router()
// 导入数据库操作模块
const db = require('../db/index')
var moment = require('moment')
// // 导入验证数据合法性的中间件
// const expressJoi = require('@escook/express-joi')
// // 导入需要的验证规则对象
// const {
//   add_car_info_schema,
//   update_car_info_schema,
//   update_password_schema,
// } = require('../schema/car_')
// // 使用 bcrypt.compareSync(提交的密码，数据库中的密码) 方法验证密码是否正确
// const bcrypt = require('bcryptjs')

// 获取 所有车辆信息
router.get('/carinfoAll', (req, res) => {
  // console.log(req.car_, '2222')
  console.log(req.query, '3333')
  // console.log(req.params, '44444')
  // 偏移量
  const pages = req.query.pagesize * (req.query.pagenum - 1)
  console.log(pages)

  if (req.query.query) {
    var sql = `select * from cars where car_card like "%${
      req.query.query
    }%" limit ${(pages, req.query.pagesize)};`
  } else {
    // var sql = `select * from car_ limit ${pages},${req.query.pagesize}`
    var sql = 'select * from cars'
  }
  // const sql = `select * from car_ where car_name like "%${req.query.query}%";`
  // 注意：req 对象上的 car_ 属性，是 Token 解析成功，express-jwt 中间件帮我们挂载上去的
  db.query(sql, (err, results) => {
    // 1. 执行 SQL 语句失败
    if (err) return res.cc(err + 'sql语句执行失败')

    // 2. 执行 SQL 语句成功，但是查询到的数据条数不等于 1
    if (results.length < 1) return res.cc('获取车辆信息失败！')

    // 3. 将车辆信息响应给客户端
    res.send({
      code: 200,
      message: '获取全部车辆基本信息成功！',
      data: results,
      total: results.length,
    })
  })
})

// 根据id获取车辆的基本信息
router.get('/carinfo/:id', (req, res) => {
  console.log(req.car_, '111111111111')
  console.log(req.params, '222222222')
  // 根据车辆的 id，查询车辆的基本信息
  // 注意：为了防止车辆的密码泄露，需要排除 password 字段
  const sql = `select * from cars where car_id=?`
  // 注意：req 对象上的 car_ 属性，是 Token 解析成功，express-jwt 中间件帮我们挂载上去的
  db.query(sql, req.params.id, (err, results) => {
    // 1. 执行 SQL 语句失败
    if (err) return res.cc(err)

    // 2. 执行 SQL 语句成功，但是查询到的数据条数不等于 1
    if (results.length !== 1) return res.cc('获取车辆信息失败！')

    // 3. 将车辆信息响应给客户端
    res.send({
      code: 200,
      message: '获取车辆基本信息成功！',
      data: results[0],
    })
  })
  // res.send('ok')
})
// 获取车辆状态
router.get('/status', (req, res) => {
  const sql = `select car_id,car_status from cars`
  // 注意：req 对象上的 car_ 属性，是 Token 解析成功，express-jwt 中间件帮我们挂载上去的
  db.query(sql, (err, results) => {
    // 1. 执行 SQL 语句失败
    if (err) return res.cc(err)

    // 2. 执行 SQL 语句成功，但是查询到的数据条数不等于 1
    if (results.length !== 1) return res.cc('获取车辆状态信息失败！')

    // 3. 将车辆信息响应给客户端
    res.send({
      code: 200,
      message: '获取车辆状态信息成功！',
      data: results[0],
    })
  })
  // res.send('ok')
})

// 更新车辆信息
router.post('/carinfo/:id', (req, res) => {
  const sql = `update cars set ? where car_id=?`
  console.log(req.params, ',,,,,,,,,,,,,,,')
  console.log(req.body, '................')
  req.body.car_date = moment(req.body.car_date).format('YYYY-MM-DD HH:mm:ss')
  // req.body.car_status = req.body.car_status == '送达' ? 0 : 1

  db.query(sql, [req.body, req.params.id], (err, results) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err)

    // 执行 SQL 语句成功，但影响行数不为 1
    if (results.affectedRows !== 1) return res.cc('修改车辆基本信息失败！')

    // 修改车辆信息成功
    res.send({
      code: 200,
      message: '修改车辆基本信息成功！',
    })
  })
})

// 添加车辆信息
router.post('/addcarinfo', (req, res) => {
  console.log(req.body, 'add|add')
  // 接收表单数据
  const car_info = req.body
  console.log(car_info, '+++++++++++++++')

  const sql = `select * from cars where car_card=?`
  db.query(sql, [car_info.car_card], function (err, results) {
    // 执行 SQL 语句失败
    if (err) {
      return res.send({ code: 400, message: err.message })
    }
    // 车辆已经存在
    if (results.length > 0) {
      return res.send({
        code: 400,
        message: '车辆已经存在，请误重复添加！',
      })
    }
    car_info.car_date = moment(car_info.car_date).format('YYYY-MM-DD HH:mm:ss')
    // console.log(car_info, '6666666666666')
    const sql = 'insert into cars set ?'
    db.query(sql, car_info, function (err, results) {
      // 执行 SQL 语句失败
      if (err) return res.send({ code: 400, message: err.message })
      // SQL 语句执行成功，但影响行数不为 1
      if (results.affectedRows !== 1) {
        return res.send({
          code: 400,
          message: '添加车辆信息失败，请稍后再试！',
        })
      }
      // 添加成功
      res.send({ code: 200, message: '添加车辆信息成功！' })
    })
  })
})

// 根据id删除车辆信息
router.delete('/carinfo/:id', (req, res) => {
  // 定义根据 id 删除用户数据的 SQL 语句
  const sql = `delete from cars where car_id=?`
  db.query(sql, req.params.id, (err, results) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err.message)
    // SQL 语句执行成功，但影响行数不为 1
    if (results.affectedRows !== 1) {
      // return res.send({ code: 400, message: '添加用户失败，请稍后再试！' })
      return res.cc('删除车辆信息失败，请稍后再试！')
    }

    // 删除成功
    res.send({
      code: 200,
      message: '删除车辆信息成功！',
    })
  })
})

//   获取 处于空闲车辆的 车牌号
router.get('/carcard', (req, res) => {
  const sql = `select car_id,car_card from cars where car_status=0`
  // 注意：req 对象上的 order_ 属性，是 Token 解析成功，express-jwt 中间件帮我们挂载上去的
  db.query(sql, (err, results) => {
    // 1. 执行 SQL 语句失败
    if (err) return res.cc(err)

    // 2. 执行 SQL 语句成功，但是查询到的数据条数不等于 1
    if (results.length < 1) return res.cc('获取车辆状态信息失败！')

    // 3. 将车辆信息响应给客户端
    res.send({
      code: 200,
      message: '获取车辆状态信息成功！',
      data: results,
    })
  })
})

// 根据车牌获取可用车辆信息
router.get('/carcard/:card', (req, res) => {
  const sql = `select * from cars where car_card=?`
  // 注意：req 对象上的 car_ 属性，是 Token 解析成功，express-jwt 中间件帮我们挂载上去的
  db.query(sql, req.params.card, (err, results) => {
    // 1. 执行 SQL 语句失败
    if (err) return res.cc(err)

    // 2. 执行 SQL 语句成功，但是查询到的数据条数不等于 1
    if (results.length !== 1) return res.cc('获取车辆信息失败！')

    // 3. 将车辆信息响应给客户端
    res.send({
      code: 200,
      message: '获取车辆信息成功！',
      data: results[0],
    })
  })
})

// 根据车牌号  更新车辆信息
router.post('/carcard/:card', (req, res) => {
  const sql = `update cars set ? where car_card=?`
  console.log(req.params, ',,,,,,,,,,,,,,,')
  console.log(req.body, '................')

  req.body.car_date = moment(req.body.car_date).format('YYYY-MM-DD HH:mm:ss')
  db.query(sql, [req.body, req.params.card], (err, results) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err)

    // 执行 SQL 语句成功，但影响行数不为 1
    if (results.affectedRows !== 1) return res.cc('修改车辆基本信息失败！')

    // 修改车辆信息成功
    res.send({
      code: 200,
      message: '修改车辆基本信息成功！',
    })
  })
})

// 向外共享路由对象
module.exports = router
